package com.library.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.library.bean.User;
import com.library.dao.BaseDao;
import com.library.dao.UserDao;

public class UserDaoImpl implements UserDao{

	@Override
	public User selectUserByUsername(String username) {
		// 数据库连接 操作对象 结果集
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		ResultSet res = null;// 结果集，用于转载查询到的结果
		//方法最终要返回的结果
		User user = null;
		//要执行的sql语句
		String sql = "SELECT * FROM user WHERE username = ?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setString(1, username);// 填sql里的?
			res = ps.executeQuery();// 执行 查询，返回 结果集
			//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
			if(res.next()) {
				user = new User();
				int userId = res.getInt("userId");//从结果集中 取出 名字叫 做userId的 列的值，且取出来的数据 为整形 res.getInt("userId");
				user.setUserId(userId);//把 取出来的用户id 转入到用户对象中
				
				user.setUsername(res.getString("username"));
				user.setPassword(res.getString("password"));
				user.setSex(res.getString("sex"));
				user.setAge(res.getInt("age"));
				user.setPhone(res.getString("phone"));
				user.setRealName(res.getString("realName"));
				user.setHeadImg(res.getString("headImg"));
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(res, ps, con);
		}
		return user;
	}

	@Override
	public User selectUserByPhone(String phone) {
		// 数据库连接 操作对象 结果集
				Connection con = null;
				PreparedStatement ps = null;
				ResultSet res = null;
				//方法最终要返回的结果
				User user = null;
				//要执行的sql语句
				String sql = "SELECT * FROM user WHERE phone = ?";
				try {
					con = BaseDao.getCon();//获取连接
					ps = con.prepareStatement(sql);//预编译  sql
					ps.setString(1, phone);// 填sql里的 ?
					res = ps.executeQuery();// 执行 查询，返回 结果集
					//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
					if(res.next()) {
						user = new User();
						int userId = res.getInt("userId");//从结果集中 取出 名字叫 做userId的 列的值，且取出来的数据 为整形 res.getInt("userId");
						user.setUserId(userId);//把 取出来的用户id 转入到用户对象中
						
						user.setUsername(res.getString("username"));
						user.setPassword(res.getString("password"));
						user.setSex(res.getString("sex"));
						user.setAge(res.getInt("age"));
						user.setPhone(res.getString("phone"));
						user.setRealName(res.getString("realName"));
						user.setHeadImg(res.getString("headImg"));
					}
				
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					//关闭资源
					BaseDao.closeAll(res, ps, con);
				}
				return user;
	}

	@Override
	public int insertUser(User user) {
		// 数据库连接 操作对象 结果集
		Connection con = null;
		PreparedStatement ps = null;
		//方法返回 受影响的行数
		int row = 0;
		//要执行的sql语句
		String sql = "INSERT INTO user(username,password,age,sex,phone,realName,headImg) VALUES (?,?,?,?,?,?,?)";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setString(1, user.getUsername());
			ps.setString(2, user.getPassword());
			ps.setInt(3, user.getAge());
			ps.setString(4, user.getSex());
			ps.setString(5, user.getPhone());
			ps.setString(6, user.getRealName());
			ps.setString(7, user.getHeadImg());
			row = ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(null, ps, con);
		}
		
		return row;
		
	}

	@Override
	public User selectUser(String username, String password) {
		// 数据库连接 操作对象 结果集
				Connection con = null;//数据库连接对象  代表一次数据库连接
				PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
				ResultSet res = null;// 结果集，用于转载查询到的结果
				//方法最终要返回的结果
				User user = null;
				//要执行的sql语句
				String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
				try {
					con = BaseDao.getCon();//获取连接
					ps = con.prepareStatement(sql);//预编译  sql
					ps.setString(1, username);// 填sql里的?
					ps.setString(2, password);
					res = ps.executeQuery();// 执行 查询，返回 结果集
					//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
					if(res.next()) {
						user = new User();
						int userId = res.getInt("userId");//从结果集中 取出 名字叫 做userId的 列的值，且取出来的数据 为整形 res.getInt("userId");
						user.setUserId(userId);//把 取出来的用户id 转入到用户对象中
						
						user.setUsername(res.getString("username"));
						user.setPassword(res.getString("password"));
						user.setSex(res.getString("sex"));
						user.setAge(res.getInt("age"));
						user.setPhone(res.getString("phone"));
						user.setRealName(res.getString("realName"));
						user.setHeadImg(res.getString("headImg"));
					}
				
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					//关闭资源
					BaseDao.closeAll(res, ps, con);
				}
				return user;
	}


}
